package com.freewater.javabase.demo.messageformat;

import java.text.MessageFormat;

/**
 * 参考：http://www.ibloger.net/article/139.html
 */
public class MessageFormatTest {
    public static void main(String[] args) {
        // 1、ArgumentIndex必须是非负整数，它的个数不只限于0到9这10个，它可以用0到9的数字组成，因此可以有好多个
        String msg = "{0}{1}{2}{3}{4}{5}{6}{7}{8}";
        Object[] array = new Object[]{"A", "B", "C", "D", "E", "F", "G", "H", "I",};
        String value = MessageFormat.format(msg, array);
        System.out.println(value); // 输出：ABCDEFGHI
        // 2、格式化字符串时，两个单引号才表示一个单引号，单个单引号会被省略，除非中文单引号不会被省略
        value = MessageFormat.format("oh, {0} is 'a' pig", "ZhangSan");
        System.out.println(value); // 输出：oh, ZhangSan is a pig
        value = MessageFormat.format("oh, {0} is ''a'' pig", "ZhangSan");
        System.out.println(value); // 输出：oh, ZhangSan is 'a' pig
        // 3、单引号会使其后面的占位符均失效，导致直接输出占位符。
        value = MessageFormat.format("{0}{1}", 1, 2); // 结果12
        System.out.println(value); // 结果12
        value = MessageFormat.format("'{0}{1}", 1, 2); // 结果{0}{1}
        System.out.println(value); // 结果{0}{1}
        value = MessageFormat.format("'{0}'-{1}", 1, 2); // 结果{0}-2
        System.out.println(value); // 结果{0}-2
        value = MessageFormat.format("oh, {0,number,#.#} is good num", Double.valueOf("3.1415"));
        System.out.println(value);  // 输出：oh, 3.1 is good num
        // 每调用一次MessageFormat.format方法，都会新创建MessageFormat的一个实例，相当于MessageFormat只使用了一次，
        // 因此若要多次格式同一个模式的字符串，那么创建一个MessageFormat实例在执行格式化操作比较好些
        String message = "oh, {0} is a pig";
        MessageFormat messageFormat = new MessageFormat(message);
        array = new Object[]{"ZhangSan"};
        value = messageFormat.format(array);
        System.out.println(value);
    }
}
